package com.ucar.common.interceptor;

import java.lang.reflect.Method;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * MethodInterceptor利用的是AOP的实现机制，它拦截的目标是方法，即使不是controller中的方法。
 * 实现MethodInterceptor拦截器大致也分为两种，一种是实现MethodInterceptor接口，另一种利用AspectJ的注解或配置。
 * @author dinghao
 *
 */
public class ExeMethodTimeInterceptor implements MethodInterceptor{

	private final Logger logger=LoggerFactory.getLogger(getClass());
	
	@Override
	public Object invoke(MethodInvocation invocation) throws Throwable {
		//在拦截的方法执行前
		long startTime=System.currentTimeMillis();
		//继续执行原来的方法
		Object result=invocation.proceed();
		//拦截的方法执行后
		long endTime=System.currentTimeMillis();
		Method method = invocation.getMethod();
		String declaredClassName=method.getDeclaringClass().getName();
		String methodName=method.getName();
		logger.info("{}类{}方法成功执行，耗时{}毫秒",declaredClassName,methodName,endTime-startTime);
		return result;
	}
}
